iT邦幫忙

2026 iThome 鐵人賽

DAY 1
1
Software Development

30天刷完leetcoode75系列 第 1

C++ 演算法練習 Day1|1768, 1071, 1431 題解與思路分享

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260915/20184265hIAHCQIN2Q.png

題目解析:將兩個字串合並,並將A字串跟B字串合併在一起,如果字串不夠長就空白
解題思路:先設一個空字串ans,然後丟進迴圈開始跑,如果還沒超過字串長度就將該字元加入到ans,最後回傳ans

class Solution {
public:
    string mergeAlternately(string word1, string word2) {
        string ans = "";
        for(int i=0; i<max(word1.size(), word2.size()); i++){
            if(i < word1.size()){
                ans += word1[i];
            }
            if(i < word2.size()){
                ans += word2[i];
            }
        }

        return ans;
    }
};

https://ithelp.ithome.com.tw/upload/images/20260915/20184265GDCR0pND96.png

題目解析:需要找出一個字串t能夠相加數次等於A字串跟B字串
解題思路:先找出A跟B字串字數的最大公因數n,然後再將A字串的0-n合成一個ans並設一個check的布林值,最後將ans丟進兩個for迴圈開始跑,如果都符合題目要求,check將繼續維持1,最後會輸出ans,反之則會輸出空白

class Solution {
public:
    string gcdOfStrings(string str1, string str2) {
        int a = str1.size(), b = str2.size();
        int n = gcd(a, b);

        string ans = "";
        for(int i=0; i<n; i++){
            ans += str1[i];
        }

        bool check = 1;
        int i = 0;
        while(check && i < str1.size()){
            if(str1[i] != ans[i%ans.size()]){
                check = 0;
            }i++;
        }

        i = 0;
        while(check && i < str2.size()){
            if(str2[i] != ans[i%ans.size()]){
                check = 0;
            }i++;
        }

        if(check){
            return ans;
        }else{
            return "";
        }
    }
};

https://ithelp.ithome.com.tw/upload/images/20260915/20184265UBRYWsVmNu.png

題目解析:有n個小朋友,每個人都有不同數量的糖果,而你手上有m個糖果,題問問如果你的糖果給第n位小朋友,他是否可以變成這群小朋友裡面擁有最多糖果的小朋友
解題思路:先複製一個vector,然後將複製的vector排序找出最大的數,然後開始跑迴圈去判斷這位小朋友原本所擁有的糖果加上你給的,是否大於等於最多的小朋友,如果是將要回傳的vector加入1,不是的話則加入0

class Solution {
public:
    vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
        vector<int> v = candies;
        vector<bool> ans;
        sort(v.begin(), v.end());
        int q = v.back();

        for(auto it : candies){
            if(it + extraCandies >= q){
                ans.push_back(1);
            }else{
                ans.push_back(0);
            }
        }

        return ans;
    }
};

下一篇
C++ 演算法練習 Day2|605,345,151 題解與思路分享
系列文
30天刷完leetcoode756
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
godlichen
iT邦新手 5 級 ‧ 2026-09-20 03:23:28

超愛這系列,求更新!!

我要留言

立即登入留言